Page({
  data: {
    userInfo: {},
    todayCourses: [],
    notices: [],
    examList: [], // 添加考试安排列表
    hasCheckedIn: false,
    quickActions: [
      {
        id: 'attendance',
        name: '考勤打卡',
        icon: '/images/kaoqin.png',
        url: '/pages/student/kaoqin/kaoqin'
      },
      {
        id: 'leave',
        name: '请假申请',
        icon: '/images/qingjia.png',
        url: '/pages/student/qingjia/qingjia'
      },
      {
        id: 'course',
        name: '课程表',
        icon: '/images/kecheng.png',
        url: '/pages/student/kechenbiao/kechenbiao'
      },
      {
        id: 'grade',
        name: '成绩查询',
        icon: '/images/chengji.png',
        url: '/pages/student/chengji/chengji'
      },
      // 添加考试安排快捷入口
      {
        id: 'exam',
        name: '考试安排',
        icon: '/images/kaoshi.png',
        url: '/pages/student/kaoshi/kaoshi'
      }
    ],
    // 修改天气信息的初始值
    weather: {
      temp: '--°C',
      condition: '加载中'
    }
  },
  
  // 在页面加载时获取并保存用户信息
  onLoad: function() {
    
    // 获取用户信息
    const userInfo = wx.getStorageSync('userInfo') || {};
    const userId = userInfo.userId || wx.getStorageSync('userId');
    
    this.setData({
      userInfo: userInfo,
      userId: userId
    });
    
    // 获取天气信息
    this.fetchWeather();
    
    // 获取今日课程 - 使用新的fetchTodayCourses方法
    this.fetchTodayCourses();
    
    // 获取考勤统计
    this.getAttendanceStats();
    
    // 获取即将到来的考试
    this.getUpcomingExams();
    
    // 获取通知公告
    this.fetchNotices();
    
    // 检查今日考勤
    this.checkAttendance();
  },

  // 获取考勤统计
  getAttendanceStats: function() {
    const token = wx.getStorageSync('token');
    
    wx.request({
      url: 'http://localhost:3000/api/attendances/stats',
      method: 'GET',
      data: {
        userId: this.data.userInfo.userId,
        role: 'student'  // 添加角色参数
      },
      header: {
        'Authorization': `Bearer ${token}`  // 确保添加认证头
      },
      success: (res) => {
        console.log('获取考勤统计成功:', res.data);
        this.setData({
          attendanceStats: res.data
        });
      },
      fail: (err) => {
        console.log('获取考勤统计失败:', err);
      }
    });
  },

  // 获取即将到来的考试
  getUpcomingExams: function() {
    const app = getApp();
    const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
    const userId = this.data.userId || this.data.userInfo.userId || wx.getStorageSync('userId');
    
    console.log('获取即将到来的考试请求参数:', { userId: userId });
    
    if (!userId) {
      console.error('缺少用户ID，无法获取考试信息');
      return;
    }
    
    wx.request({
      url: `${serverUrl}/api/exams/upcoming`,
      method: 'GET',
      data: { userId: userId },
      success: (res) => {
        if (res.statusCode === 200) {
          console.log('获取考试信息成功:', res.data);
          this.setData({
            examList: res.data
          });
        } else {
          console.error('获取考试信息失败:', res);
        }
      },
      fail: (err) => {
        console.error('获取考试信息失败:', err);
      }
    });
  },

  // // 获取今日课程
  // getTodayCourses: function() {
  //   const app = getApp();
  //   const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
  //   const userInfo = this.data.userInfo || wx.getStorageSync('userInfo') || {};
  //   const userId = this.data.userId || userInfo.userId || wx.getStorageSync('userId');
  //   const role = userInfo.role || 'student';
    
  //   console.log('获取今日课程请求参数:', { userId: userId, role: role });
    
  //   if (!userId) {
  //     console.error('缺少用户ID，无法获取今日课程');
  //     return;
  //   }
    
  //   wx.request({
  //     url: `${serverUrl}/api/courses/today`,
  //     method: 'GET',
  //     data: { 
  //       userId: userId,
  //       role: role
  //     },
  //     success: (res) => {
  //       // 处理响应数据
  //       // ...
  //     },
  //     fail: (err) => {
  //       console.error('获取今日课程失败:', err);
  //     }
  //   });
  // },  
  
  // 添加获取考试安排的方法
  fetchExams: function() {
    const token = wx.getStorageSync('token');
    
    wx.request({
      url: 'http://localhost:3000/api/exams/upcoming',
      method: 'GET',
      header: {
        'Authorization': 'Bearer ' + token
      },
      success: (res) => {
        if (res.statusCode === 200) {
          this.setData({
            examList: res.data.slice(0, 3) // 只显示最近的3场考试
          });
        }
      },
      fail: () => {
        // 模拟数据
        const mockExams = [
          {
            id: 1,
            courseName: '高等数学',
            examTime: '2023-12-25 09:00-11:00',
            location: '教学楼A栋301',
            seatNumber: 'A12'
          },
          {
            id: 2,
            courseName: '大学英语',
            examTime: '2023-12-27 14:00-16:00',
            location: '教学楼B栋205',
            seatNumber: 'B08'
          },
          {
            id: 3,
            courseName: '数据结构',
            examTime: '2023-12-29 09:00-11:00',
            location: '教学楼C栋102',
            seatNumber: 'C15'
          }
        ];
        
        this.setData({
          examList: mockExams
        });
      }
    });
  },
  
  // 添加获取天气的方法
  fetchWeather: function() {
    wx.request({
      url: 'https://api.seniverse.com/v3/weather/now.json',
      method: 'GET',
      data: {
        key: 'SIij8E6v5NGGp0nYK',
        location: 'fujianfuzhou',
        language: 'zh-Hans',
        unit: 'c'
      },
      success: (res) => {
        if (res.data && res.data.results && res.data.results[0]) {
          const weatherData = res.data.results[0];
          this.setData({
            weather: {
              temp: `${weatherData.now.temperature}°C`,
              condition: weatherData.now.text
            }
          });
        }
      },
      fail: (err) => {
        console.error('获取天气信息失败：', err);
        this.setData({
          weather: {
            temp: '--°C',
            condition: '获取失败'
          }
        });
      }
    });
  },
  
  // 添加 onShow 方法来更新 tabBar 选中状态
  onShow: function() {
    if (typeof this.getTabBar === 'function' && this.getTabBar()) {
      // 设置选中项
      this.getTabBar().setData({
        selected: 0  // 首页是第一个选项卡
      });
    }
  },
  
  // 获取今日课程
  // 删除 getTodayCourses 方法，修改 fetchTodayCourses 方法
  fetchTodayCourses: function() {
    const app = getApp();
    const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
    const token = wx.getStorageSync('token');
    
    // 增加多种获取 userId 的方式
    const userInfo = wx.getStorageSync('userInfo') || {};
    const userId = this.data.userId || userInfo.userId || userInfo.id || wx.getStorageSync('userId');
    
    // 获取当前是星期几（0是星期日，1-6是星期一到星期六）
    const today = new Date();
    const weekday = today.getDay() === 0 ? 7 : today.getDay();
    
    console.log('当前星期几:', weekday);
    console.log('获取今日课程的用户ID:', userId);
    
    // 确保userId存在
    if (!userId) {
      console.error('缺少用户ID，无法获取今日课程');
      wx.showToast({
        title: '获取用户信息失败，请重新登录',
        icon: 'none'
      });
      // 可以选择跳转到登录页
      setTimeout(() => {
        const app = getApp();
        app.logout();
      }, 1500);
      return;
    }
    
    // 修正API路径，确保以/结尾并附加userId
    const apiUrl = `${serverUrl}/api/courses/today`;
    console.log('请求今日课程的URL:', apiUrl);
    
    wx.request({
      url: apiUrl,
      method: 'GET',
      data: {
        userId: userId
      },
      header: {
        'Authorization': `Bearer ${token}`
      },
      success: (res) => {
        if (res.statusCode === 200) {
          console.log('获取到的所有课程:', res.data);
          
          // 处理课程数据，确保包含所需字段
          const formattedCourses = res.data.map(course => {
            return {
              id: course.id,
              name: course.name || course.courseName || '未知课程',
              startTime: course.startTime ? course.startTime.substring(0, 5) : '',
              endTime: course.endTime ? course.endTime.substring(0, 5) : '',
              location: course.location || '未知地点',
              teacher: course.teacherName || '未知教师',
              weekday: parseInt(course.weekday) || weekday
            };
          });
          
          // 筛选今日课程
          const todayCourses = formattedCourses.filter(course => {
            // 检查weekday是否匹配当前星期几
            return course.weekday === weekday;
          });
          
          console.log('今日课程:', todayCourses);
          
          // 如果没有今日课程，显示所有课程
          if (todayCourses.length === 0) {
            console.log('今日没有课程，显示所有课程');
            this.setData({
              todayCourses: formattedCourses.slice(0, 3) // 只显示前3个课程
            });
          } else {
            this.setData({
              todayCourses: todayCourses
            });
          }
        } else {
          console.error('获取课程失败:', res);
          // 设置默认课程数据，避免显示undefined
          this.setDefaultCourses();
        }
      },
      fail: (err) => {
        console.error('请求课程失败:', err);
        // 设置默认课程数据，避免显示undefined
        this.setDefaultCourses();
      }
    });
  },
  
  // 设置默认课程数据
  setDefaultCourses: function() {
    this.setData({
      todayCourses: [
        {
          id: 1,
          name: '程序设计基础',
          startTime: '10:00',
          endTime: '11:40',
          location: '第一教学楼 102',
          teacher: '王老师',
          weekday: new Date().getDay() === 0 ? 7 : new Date().getDay()
        }
      ]
    });
  },
  
  // 获取通知
  fetchNotices: function() {
    const app = getApp();
    const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
    const token = wx.getStorageSync('token');
    
    console.log('开始获取通知公告');
    
    wx.request({
      url: `${serverUrl}/api/notices`,
      method: 'GET',
      header: {
        'Authorization': `Bearer ${token}`
      },
      success: (res) => {
        if (res.statusCode === 200) {
          console.log('获取通知成功:', res.data);
          
          // 确保返回的数据是数组
          const noticesData = Array.isArray(res.data) ? res.data : 
                             (res.data.notices || res.data.data || []);
          
          // 处理通知数据，确保格式一致
          const formattedNotices = noticesData.map(notice => {
            return {
              id: notice.id,
              title: notice.title,
              content: notice.content,
              date: notice.publishTime || notice.date || '未知日期',
              isRead: notice.isRead || false
            };
          });
          
          console.log('格式化后的通知:', formattedNotices);
          
          this.setData({
            notices: formattedNotices
          });
        } else {
          console.error('获取通知失败:', res);
        }
      },
      fail: (err) => {
        console.error('获取通知失败:', err);
      }
    });
  },
  
  // 检查今日是否已签到
  checkAttendance: function() {
    const app = getApp();
    const serverUrl = app.globalData.serverUrl || 'http://localhost:3000';
    
    // 直接从本地存储获取用户信息
    const userInfo = wx.getStorageSync('userInfo');
    const token = wx.getStorageSync('token');
    
    console.log('获取考勤的用户信息:', userInfo);
    
    // 确保有用户ID
    let userId = null;
    if (userInfo) {
      // 尝试多种可能的ID字段
      userId = userInfo.userId || userInfo.id;
    }
    
    if (!userId) {
      console.error('用户未登录或缺少userId');
      return;
    }
    
    wx.request({
      url: `${serverUrl}/api/attendances/today`,
      method: 'GET',
      data: {
        userId: userId
      },
      header: {
        'Authorization': `Bearer ${token}`
      },
      success: (res) => {
        if (res.statusCode === 200) {
          console.log('获取今日考勤成功:', res.data);
          // 处理考勤数据
          const attendances = res.data;
          let hasCheckedIn = false;
          
          // 检查是否已签到
          if (attendances && attendances.length > 0) {
            hasCheckedIn = attendances.some(item => item.status === 'present');
          }
          
          this.setData({
            hasCheckedIn: hasCheckedIn
          });
        } else {
          console.error('获取今日考勤失败:', res);
          this.setData({
            hasCheckedIn: false
          });
        }
      },
      fail: (err) => {
        console.error('获取今日考勤请求失败:', err);
        this.setData({
          hasCheckedIn: false
        });
      }
    });
  },
  
  // 跳转到考勤签到页面
  navigateToCheckin: function() {
    wx.navigateTo({
      url: '/pages/student/kaoqin/kaoqin'  // 修改路径
    });
  },
  
  // 通用导航函数
  // 在现有的navigateTo函数中添加通知公告跳转
  navigateTo: function(e) {
    const url = e.currentTarget.dataset.url;
    wx.navigateTo({
      url: url
    });
  },
  
  // 查看通知详情
  viewNoticeDetail: function(e) {
    const noticeId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/student/notice/detail/detail?id=${noticeId}`
    });
  },
  
  // 查看考试详情
  viewExamDetail: function(e) {
    const examId = e.currentTarget.dataset.id;
    wx.navigateTo({
      url: `/pages/student/kaoshi/detail?id=${examId}`
    });
  }
})